
/**
 * let 暂时性死区（前面定义的参数不能引用后面定义的）
 */
// console.log(a);
// let a = 10;
// Error: Cannot access 'a' before initialization

/**
 * var 没有这个现象，只不过是读不出值而已
 * var定义变量，会有变量提升的情况，即
 * 会在脚本最顶部先执行 var b; 声明变量
 * 然后再在原来的位置赋值 b = 100;
 */
console.log(b);
var b = 100;

// undefined

/**
 * 函数默认参数也遵循暂时性死区规则
 */

// function example1(name = age, age = 100) {
//     return `name: ${name}, age: ${age}`;
// }
// example1()

// 函数中默认参数有自己的作用域，和函数体中的作用域相对独立
function example2(name = 'aaa', age = number) {
    let number = 100;
    return `name: ${name}, age: ${age}`;
}
example2()

// ES6新增的let、const关键字声明的变量会产生块级作用域，
// 如果变量在当前作用域中被创建之前被创建出来，由于此时还未完成语法绑定，如果我们访问或使用该变量，就会产生暂时性死区的问题，
// 由此我们可以得知，从变量的创建到语法绑定之间这一段空间，我们就可以理解为‘暂时性死区’